%% /usr/local/src/lcc/lcc-4.1.beta.9/ChangeLog, Sat May 12 10:59:35 2001
%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
%% /usr/local/src/lcc/lcc-4.1.beta.8/ChangeLog, Fri Apr  6 17:36:49 2001
%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
%% /usr/local/src/lcc/lcc-4.1.beta.7/ChangeLog, Wed Mar 28 17:32:28 2001
%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
%% /usr/local/src/lcc/lcc-4.1.beta.7/ChangeLog, Fri Mar 23 08:15:04 2001
%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>
%% /usr/local/src/lcc/lcc-4.1.beta.6/ChangeLog, Wed Mar 14 11:46:27 2001
%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>

========
Foreword
========

This packaging of lcc-4.1 as lcc-4.1.beta.7 (or later) includes all of
the updates posted at the compiler Web site,

	http://www.cs.princeton.edu/software/lcc/

In addition, the code has been updated to use the GNU
autoconfiguration system, which vastly simplifies building,
installation, and testing, making it possible to do the job with the
GNU standard

	./configure && make all check install

Use of autoconfiguration has NO effect on the copyright or licensing
of lcc, and end users NEVER require an installation of the GNU
autoconf package; only the developers and porters do.

The lcc manual page has been extended to document some
previously-available, but undocumented options, and to document some
new ones.  It now also documents all environment variables recognized
by lcc.  A new manual page for rcc has also been provided.

Finally, substantial support for several new and future platforms has
been added.  Now, lcc can be built, tested, and installed even on
systems for which no code generation support is yet available (such as
three operating systems on PowerPC, and one on PA-RISC).  lcc can
still be used on them for syntax checking, and for cross-platform
assembly code generation, and for linking .o files from other C
compilers.

------------------------------------------------------------------------
========================================================================
lcc-4.1.beta.9 development
	
2001-05-19 16:21:01-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* cpp/macro.c:
	  Fix a long-standing and extremely subtle bug.  The bug
	  was uncovered on 19-May-2001 in compilation of a large
	  program, and the failing code was eventually reduced to
	  this simple test:

		% cat bug.c
		#if (X > 0)
		char *greater;
		#endif

		% cpp -DX=1 bug.c
		...
		char *greater;

		% cpp -DX bug.c
		Segmentation fault (core dumped)

	  This failure occurred on about half the architectures cpp
	  is installed on at the site where the bug was found, and
	  was not consistently only on big-endian or only
	  little-endian addressing architectures.

	  Parallel debugger sessions on a working and a failing cpp
	  located the problem:

		When a macro is defined without a value (as in
		-DX), the string in onetoken[0].t is supplied as
		the default value, and then later, in the call
		chain [main() -> process() -> control() ->
		eval()] for the evaluation of "#if (X > 0)", in
		"case NUMBER:" in that function, the statement
		"p[tp->len] = '\0';" supplies a terminating NUL.
		On systems where "1" is stored in read-only
		memory, this causes the segment violation.

	  The solution is therefore to create a writable copy of
	  the string "1", which we need to do only once.


2001-05-12 10:21:24-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	This block of changes is for support of a new platform: GNU/Linux
	on Compaq/DEC Alpha hardware.  The etc/alpha/* and
	alpha/linux/tst/* files before this week were merely placeholders,
	and the porting work began three days ago on an old (July 1995
	vintage) workstation, an Alphastation 200 4/100 (100 MHz Alpha
	21064 EV4 CPU) which had been rebuilt to run the Red Hat 6.2
	release of Alpha GNU/Linux instead of Compaq/DEC OSF/1 (Tru64).

	* src/alphalinux.md: Add new file. Because a larger number of
	  changes were needed to src/alpha.md than expected, I decided for
	  now to create a separate machine description for alpha/linux.
	  When everything is finally working, these two should be merged
	  back into a single file, with conditional compilation selecting
	  the OSF/1 and GNU/Linux variants.  Here are the major differences:

		* Change the Interface name from alphaIR to alphalinuxIR.

		* Add support for profiling with gprof and prof.

		* Add support for both dbx-style and gdb-style file and
		  line number symbol table directives, with gdb-style the
		  default (GNU gas will not accept dbx-style directives).

		* Insert explicit 0 offsets in all instruction templates,
		  because GNU gas will not accept "ldb $r1,($r2)", even
		  though Compaq/DEC /usr/bin/as does; gas wants "ldb
		  $r1,0($r2)" instead.

		* Change the code patterns for DIVxx and MODxx
		  instructions to use three-register operands, instead of
		  register-constant-register operands, because GNU gas
		  will not assemble the latter for these instructions,
		  which are really assembler macros.

		* Output
			.section .sdata,"aw"
		  instead of
			.sdata
		  and
			.section .rodata
		  instead of
			.rodata
		  to work around a gratuitous change in assembly language
		  in GNU gas.

	* src/bind.c: Add new Interface alphalinuxIR.

	* Makefile.in: Add dependencies and rules for alphalinux.{c,o}.

	* alpha/linux/tst/*: Updated files derived from the alpha/osf/tst
	  tree.  The output of some of these tests is still not completely
	  correct on Alpha GNU/Linux. The alpha/linux/test/*.3bk files
	  contain the expected correct output, and differences will be
	  reported by "make check-2".

	* configure.in: Update VERSIONDATE.


2001-05-10 08:10:26-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/*/linux.c: remove "-lgmon" from ld[] array, since GNU C does
	  not have that library.


2001-05-09 20:33:27-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Add new files (most duplicates of existing ones for other
	  platforms, although the FreeBSD ones have additional
	  O/S-specific customization):
		./include/sparc/linux/stddef.h
		./include/sparc/linux/stdlib.h
		./include/x86/linux/stddef.h
		./include/x86/linux/stdlib.h
		./include/x86/freebsd/assert.h
		./include/x86/freebsd/float.h
		./include/x86/freebsd/stdarg.h
		./include/x86/freebsd/limits.h
		./include/x86/freebsd/stdio.h
		./include/x86/freebsd/stddef.h
		./include/x86/freebsd/stdlib.h
		./include/ia64/linux/stddef.h
		./include/ia64/linux/stdlib.h
		./include/ia64/win32/stdlib.h
		./include/ia64/win32/stddef.h
		./include/ia64/win64/stddef.h
		./include/ia64/win64/stdlib.h
		./include/ia64/freebsd/stddef.h
		./include/ia64/freebsd/stdlib.h

	* Update files, or add new files:
		./tst2/wchar.c
		./tst2/wchar.sh
		./tst2/wchar.awk
	  The wchar.sh script has been extended to test wchar_t supported
	  in all known UNIX compilers available at the development site.

	* configure.in: Update VERSIONDATE.


2001-05-07 18:51:57-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/sparc/solaris.c: Add -D__sparc to cpp[] list.  Sun Solaris
	  2.8 header files use only that symbol, while Solaris 2.7 header
	  files use sparc and __sparc__.  With this change, "make check"
	  now passes on Solaris 2.8.


2001-05-07 11:43:22-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/lcc.c: Add  new functions split() and split_Wx_args() to
	  support comma-separated -Wx,-arg1,-arg2,-arg3,... arguments.

	  Add support for new -Wd (debug) option.

	* doc/lcc.1: Document new support for comma-separated
	  -Wx,-arg1,-arg2,-arg3,... arguments and -Wd.


2001-05-05 17:32:26-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>
	* etc/lcc.c: Correct stupid error: _CHAR_IS_SIGNED should have
	  been undefined, instead of defined, for -Wf-unsigned_char=1.


2001-05-01 10:55:34-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Adapt gcc-3.0-snapshot validation suite for gcc for use with
	  lcc.  Because this is a large package (about 75MB of disk space
	  is needed to run it), it will be kept separate from the main lcc
	  distribution, probably in a package named lcc-x.y.z-test.tar.gz,
	  in anticipation that minor updates may be needed with each
	  release x.y.z of lcc.  The package has been carefully written to
	  avoid ANY modifications of the gcc tests, so that as the gcc
	  suite is expanded, it can be dropped very easily into this
	  package.


2001-05-01 06:28:29-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* include/*/*/stdlib.h: Update wchar_t code to match that in
	  stddef.h, since 1989 and 1999 Standard C require both header
	  files to provide wchar_t support.


2001-04-30 14:38:41-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Apply patch from lcc developers to file src/lex.c. This fixes a
	  long-standing bug, present in the 1995 edition of the lcc book,
	  that prevented implicit concatenation of adjacent long string
	  literals (e.g., L"a" L"b" -> L"ab").


========================================================================
lcc-4.1.beta.8

2001-04-13 11:24:01-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>
	These final changes freeze the lcc-4.1.beta.8 release:

	* Regenerate lburg/gram.c by "byacc lburg/gram.y; mv y.tab.c
	  lburg/gram.c", then remove GNU conditional for __inline__, and
	  use inline instead.  [See the log entry for 2001-03-14
	  11:51:57-0700 below.]

	* (Automatically) edit 90 ./*/*/tst/*bk files to change version
	  number from 4.1.beta.7 to 4.1.beta.8.

	* configure.in: Add three more directories to GCCDIRLIST.

2001-04-13 09:20:43-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	In yesterday's mail, I received the HP GNU/Linux IA-64 emulator
	that runs on top of GNU/Linux on IA-32, and this morning, got it
	installed. Only three small changes were needed to make
	lcc-4.1.beta.8 build and validate successfully on GNU/Linux
	IA-64:

	* lburg/lburg.c: Parenthesize va_arg() reference to make gcc on
	  GNU/Linux on IA-64 happy.

	* lburg/gram.y: Include <stdlib.h> to get malloc() prototype on
	  GNU/Linux on IA-64.

	* Makefile.in: Add "|| $(TRUE)" on $(DF) commands.  The HP IA-64
	  emulator does not yet have a working df command.


2001-04-11 09:39:10-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Makefile.in: Rename targets test, test-1, and test-2 to
	  test-lcc, test-lcc-1, and test-lcc-2 respectively. They are
	  internal targets, not intended for invocation by end users,
	  and their existence confused users who mistakenly typed "make
	  test" instead of "make check".


2001-04-07 18:30:14-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/{lcc.1,lcc-cpp.1,rcc.1}: Insert quotes around the lcc
	  book title.  I hadn't spotted that error before today, because
	  I used groff to typeset the manual pages, and it handles more
	  than six arguments to the .I command, but old nroff discards
	  arguments after the sixth, sigh...


2001-04-06 17:43:11-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	lcc-4.1.beta.8 has been successfully built, validated, and
	tested on Sun Solaris 2.7 in 64-bit operation, using

		CC='c89 -xtarget=ultra -xarch=v9a'

	The resulting executable will run only on 64-bit UltraSPARC
	systems, but of course, still produces only code for a 32-bit
	environment.

	On SGI IRIX 6.5, I did a successful 64-bit build and
	installation with

		make CC='c89 -64'

	However, this produces 64-bit liblcc.a and librcc.a files, which
	cannot be linked with the 32-bit .o files produced by lcc.  One
	they were replaced by the 32-bit versions from an earlier build,
	the "make check-1" validation suite ran correctly, but the
	remaining four checks cannot be made because the .o files
	produced in the build are 64-bit ones.


2001-04-06 17:37:43-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	With these changes, lcc has now been installed on a Sun Solaris
	2.8 system with GNU gcc, but no Sun cc:

	* acconfig.h: Add definition of VALUESOBJ.

	* configure.in: Update version number and date.

	* configure.in: Generalize test for compiler startup files on
	  Sun Solaris, so that lcc can be installed on a system where
	  there is no Sun compiler, but only GNU gcc.

	* etc/sparc/solaris.c: Generalize location of values-*.o file to
	  configure-time variable VALUESOBJ, since Sun cc and GNU gcc
	  have different names and locations for this file.


========================================================================
lcc-4.1.beta.7

2001-04-02 14:10:20-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* PROJECTS: Record some major projects for future lcc
	  development.


2001-04-02 13:13:31-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* configure.in: Add check for BASENAME, DISTILL, MAN2HMTL, and
	  MAN2PS.

	* Makefile.in: Add docs, htmlfiles, pdffiles, and psfiles
	  targets, and associated macros and rules.  The docs target is
	  needed only at the developer's site, to facilitate creating
	  .html, .pdf, and .ps forms of all of the manual pages.


2001-04-02 11:08:24-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1: Update discussion of memory models to note that
	  only the -o32 model is currently supported by lcc.  I had
	  initially hoped that simply passing -n32, instead of -o32, to
	  the assembler would be enough to generate new-style .o files,
	  but sadly, that isn't enough: there are code generation
	  changes that must be made in lcc before -n32 can be fully
	  supported.  They will have to wait for a later release, since
	  this one is about ready to be announced.

	* etc/mips/irix.c: Revise to make -o32 memory the default.

	* configure.in: Add special case code for SGI IRIX 6.x to
	  exclude gcc as a bootstrap compiler candidate, because it does
	  not support the -o32 memory model, and lcc currently supports
	  only that one.  Also, add the memory-model flag to the chosen
	  compiler to ensure that all code is generated with the same
	  model during the build.


2001-04-02 08:17:37-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* tst2/allstdh.{c,sh}: New files to test inclusion of all C89
	  (and C99, if defined) header files.  lcc on all platforms now
	  correctly passes this test; on those for which no code
	  generator is yet available, "lcc -E allstdh.c >/dev/null"
	  reports no error.

	* include/sparc/linux/math.h: New file copied from
	  include/x86/linux/math.h.

	* include/ppc/macosx/ctype.h: New file derived from <ctype.h> on
	  that platform.

	* include/ppc/linux/ctype.h:  New file derived from <ctype.h> on
	  that platform.


2001-04-02 07:40:23-0600  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1: Add documentation of -M option.

	* doc/lcc-cpp.1: Revise documentation of -M option.

	* etc/lcc.c: Add support for -M option, so that it does not have
	  to be passed as the awkward "-Wp,-M -E".

	* cpp/tokens.c: Add macro to redefine write() so that output is
	  suppressed in the -M flag is set.  Now cpp behaves like other
	  UNIX cpp implementations: -M produces only Makefile
	  declarations, not preprocessor output.


2001-03-31 22:17:07-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1 and doc/rcc.1: Add SEE ALSO reference to new
	  lcc-cpp(1) manual page.

	* doc/lcc.1: Make POSIX comma-style the default for documenting
	  the \-Wx,arg options, with a note that the comma is optional
	  for lcc.


2001-03-31 21:37:56-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Makefile.in: Pass LCCFLAGS to run.sh in MAKE_S_FILE macro (to
	  support SGI mips/irix memory models).

	* src/run.sh: Use LCCFLAGS in lcc compilations (to support SGI
	  mips/irix memory models), and add the missing DEBUGRUN output
	  for one of those commands.

	* etc/mips/irix.c: Update with support for -32, -o32, -n32, and
	  -64 memory-model options (passed to lcc as, e.g. -Wo,-32,
	  etc.).  The -64 code is currently left in a #if 0 ... #else
	  branch, since its support requires changes to both rcc (for
	  generation of 64-bit instructions), and to Makefile.in, which
	  will ultimately need to generate liblcc{32,o32,n32,64}.a for
	  this platform.


2001-03-31 20:06:03-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/x86linux.md: Add new pattern flt2 which reverses the
	  floating-point instruction operands, and use it for division
	  and subtraction.  In the change below dated 2001-03-17
	  14:35:52-0700, I misunderstood what the GNU assembler was
	  doing when it complained about the operand "%st(1),%st": if
	  this is reordered to "%st,%st(1)" to make the assembler happy,
	  then the operation order needs to be reversed with the r
	  suffix on the instruction.  With this change, the paranoia
	  test now runs flawlessly on x86/freebsd and x86/linux.


2001-03-31 11:07:38-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* tst/README: New file to document how the tst/*.c files are to
	  be derived from the test/src/*.c files, and what the
	  ./*/*/tst/*.*bk files are.


2001-03-31 10:14:55-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/lcc.c: Add prefiltering of command-line options to support
	  GNU/POSIX -W<letter-or-digit>,options to old-lcc-style
	  -W<letter-or-digit>options.  Also, filter POSIX -W0 to lcc
	  -Wf.  [See X/Open Portability Guide: XSI Commands and
	  Utilities, Prentice-Hall (1989), ISBN 0-13-685835-X, p. 59.]

	* doc/lcc.1: Document that both "-W<letter-or-digit>," and
	  "-W<letter-or-digit>" are acceptable component option
	  prefixes, and that POSIX -W0 is equivalent to lcc -Wf.

	* Makefile.in: Add HOSTNAME variable, set by configure. Update
	  descriptive comments about check-* targets, and tweak the
	  banner printed for check-2 and check-5.  Now that src/run.sh
	  correctly runs the compile-link-execute step, set THISHOST to
	  -, meaning the current host; this avoids use of rsh/ssh and
	  rcp/scp, noticeably speeding up the tests.

	* configure.in: Unset HOSTNAME before checking for it: configure
	  allows an environment variable to override a program check.
	  At least one system, GNU/Linux on Sun SPARC, has HOSTNAME in
	  the environment.

	* */*/tst/*: New files to reflect the changes in file extensions
	  made in src/run.sh.

	* src/which.sh: New file for use by run.sh.

	* src/run.sh:
	  Fix a long-standing bug: the compile-link-execute step was
	  never run if the assembly code produced matched the master
	  copy.

	  Add support for use of ssh/scp in place of now-deprecated
	  rsh/rcp, and handle HP-UX oddity that rsh is the restricted
	  shell, while remsh is the remote shell.  This change uses the
	  new src/which.sh file, because the variation in the UNIX which
	  command make it unusable.

	  Parts of this messy script have been cleaned up, notably, the
	  file differencing code, which is now run in a loop over file
	  extensions, and all test files are checked for differences
	  before exiting with an exit code set to the number of
	  difference test failures.

	  Save the stderr output in a couple of places.  The saved file
	  extensions have been revised to group them better, now that
	  stderr is being saved.


2001-03-29 18:51:32-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc-cpp.1: New manual page file written to document cpp.
	  It is called lcc-cpp, rather than just cpp, so that its
	  installation does not overwrite the documentation of another
	  C preprocessor, such as GNU cpp, or a vendor-provided cpp.

	* test-build.sh: New script to standardize test builds that are
	  subsequently recorded in script/typescript.* files.


2001-03-28 14:37:29-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* include/sparc/linux/stdarg.h: Add typedef for __gnuc_va_list,
	  because other <*.h> files on this target expect <stdarg.h> to
	  supply it.

	* include/sparc/linux/string.h: Change definition of NULL to
	  match that used in SPARC GNU/Linux <stddef.h>, to avoid
	  cpp warnings ``Macro redefinition of NULL''.


2001-03-28 14:35:21-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* scripts/{README,typescript.*}: New directory and files with
	  build typescripts for each supported target platform, both to
	  record the status of builds, and to demonstrate to users what
	  a build looks like.  For security reasons, all mention of
	  explicit hostnames has been filtered out of these scripts,
	  using an automated filter script that I have used in the past
	  for similar reasons.


2001-03-28 14:33:40-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1, doc/rcc.1: Minor typographical changes, and for
	  rcc, add note that both standard input and output can be
	  represented by a hyphen on the command line, and that the
	  -target=name switch is mandatory.


2001-03-28 14:27:52-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/sparc/linux.c: Update to use fixas instead of /usr/bin/as.
	  The entire validation suite, including the triple test, is now
	  successful on the sparc/linux target.

	* etc/sparc/fixas.sh: New script to provide an interface to the
	  SPARC GNU/Linux assembler to patch the latter's lack of
	  support for two pseudo-ops produced by the SPARC code
	  generator (src/sparc.md). The pseudo-ops ld2 and st2 are
	  recognized by the Sun Solaris assembler, /usr/ccs/bin/as, but
	  NOT by the GNU/Linux SPARC assembler, /bin/as.  Their use
	  causes the triple test to fail on the latter system. They
	  expand into two separate ld or st instructions to load or
	  store the upper half, then the lower half of a 64-bit
	  floating-point value.  These are probably specific to the Sun
	  assembler; they are not documented in the SPARC Assembly
	  Language Reference Manual, SunSoft, Part No. 801-6649-10,
	  Revision A, August 1994, or in either the Version 8 or Version
	  9 SPARC Architecture Manuals, PTR Prentice-Hall, 1992 and
	  1994.

	  I spent a day thinking about how to deal with the ld2/st2
	  problem on the sparc/linux target.  The two instruction
	  patterns in src/sparc.md at lines 421--422 look like this:

		reg:  INDIRF8(base)     "ld2 [%0],%%f%c\n"  2
		stmt: ASGNF8(base,reg)  "st2 %%f%1,[%0]\n"  2

	  The difficulty for lcc is that %c and %1 in these lines expand
	  into a register number, but that number plus one is needed for
	  the second instruction of the generated pair, and there is no
	  way to represent it in the simple instruction-pattern syntax.

	  I considered the following possible solutions:

	  (1) Replace ld2/st2 by ldd/std.  This works on sparc/solaris
	      (and probably, on the old sparc/sunos too), but does not
	      on sparc/linux.  The reason is that ldd and std require
	      the memory location to be aligned on an 8-byte boundary,
	      and produce a run-time SIGBUS error which is silently
	      handled by the Sun operating system, but not by GNU/Linux.
	      Unfortunately, the varargs argument-passing technique on
	      this architecture involves a combination of registers and
	      memory, and the memory portion starts at 68 bytes into the
	      stack frame, which is not an 8-byte (or 16-byte) boundary.

	  (2) Identify other instructions (load-multiple and
	      store-multiple come to mind) that could do the job without
	      needing to know that missing register number.
	      Unfortunately, there is nothing in the SPARC architecture
	      that can do this for the floating-point registers.

	  (3) Expand the instruction-pattern syntax to support general
	      constant arithmetic expressions.  Here is a possible
	      syntax, using %< ... %> to mark expandable expressions:

      		reg:  INDIRF8(base)     "ld [%0],%%f%c\nld [%0],%%f%<%c+1%>\n"  2
		stmt: ASGNF8(base,reg)  "st %%f%1,[%0]\nst %%f%<%1+1%>,[%0]\n"  2

	      I took a recursive-descent expression parser that I wrote
	      a decade ago for teaching purposes, and modified it to do
	      this. It is about 215 lines of bug-free, clean, and
	      well-documented, code that could be dropped into lcc with
	      fewer than a dozen lines of changes to src/gen.c. However,
	      that is a lot of extra power to solve what should be a
	      simple problem: these two instructions are the only ones
	      in seven code generators for five architecture where the
	      expression extension is needed.

	  (3) Modify a copy of src/sparc.md to replace the two
	      instruction patterns by "#..." patterns that cause emit2()
	      in src/sparc.md to be invoked.  I spent several hours on
	      this experiment.  This was not entirely successful: I
	      could get emit2() invoked, but more often than
	      expected. Ultimately, however, this may be the proper
	      solution.  My experimental code has been saved, but is not
	      included in the lcc distribution; it is, of course, freely
	      available to anyone who wishes to pursue this idea.

	  (4) Rather than tweak the lcc code itself, postprocess the .s
	      file output from rcc, or preprocess the .s file input to
	      /usr/bin/as, to expand the two problem pseudo-ops.

	      Postprocessing has the advantage that the resultant .s
	      file can be assembled by any compiler on this platform,
	      and needs to be done only once per compilation, but the
	      disadvantage that it must be done on all platforms in
	      order to ensure that the "make check-xxx" tests work
	      everywhere.

	      Preprocessing has the disadvantage that it must be done
	      with every assembly, but the advantage that it needs to be
	      done only on the sparc/linux target, while still ensuring
	      "make check-xxx" success on all platforms.

	  I finally settled on (4): implementation look less than 15
	  minutes, and shortly thereafter, the "make triple" test
	  passed.  The filter script, fixas.sh, takes care to generate
	  assembly-terminating erroneous code for any ld2 or st2
	  instruction that it has not been programmed to deal with, so
	  that future changes to the code generator, or new patterns
	  that haven't been produced by compilation of the validation
	  test files (1630 instances of ld2, and 575 of st2, for each
	  SPARC operating system), will be immediately caught.


2001-03-28 07:39:04-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/run.sh: Replace the command-line echo by a pair of echo
	  statements, one giving the old-style verbose report if the
	  environment variable VERBOSE is nonempty, and the other giving
	  just the basename of the test file if VERBOSE is not defined,
	  or is empty.  This change removes the clutter from the "make
	  check" output, making it easier to spot problems.

	* Makefile.in: Add the VERBOSE variable, and pass it to the
	  invocation of src/run.sh for the various check* targets.


2001-03-28 07:25:25-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* README.FreeBSD: New file to record remarks about lcc on
	  FreeBSD on Intel x86 hardware.


2001-03-28 05:16:13-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/tree.c: Apply patches from the lcc developers to fix a
	  bogus ``warning: expression with no effect elided'' that lcc
	  previously issued for this simple test program (distilled from
	  a much larger one):

		void foo()
		{
		    int _cnt;
		    char *_ptr = 0;

		    _cnt < 0 ? (int)__flsbuf(0,0) : ((int)(*_ptr++ = 0));
		}

	  The generated code was correct, so the bogus warning was only
	  a nuisance.


2001-03-27 04:43:36-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* include/x86/freebsd/stdio.h: Adapt from FreeBSD-4.1.1
	  /usr/include/stdio.h.  Because the FILE* struct on this system
	  requires one element of type long long, which lcc currently
	  treats as long, the type of that element (_offset) has been
	  changed to long, and an extra dummy element inserted.  With
	  that change, the entire validation suite now passes!  User
	  programs that reference types fpos_t or off_t, or call
	  lseek(), fseeko(), or ftello(), will almost certainly not work
	  properly when compiled with lcc, until "long long" support is
	  fully implemented.


2001-03-26 16:17:22-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* include/sparc/linux/string.h: Change __STRING to _STRING_H to
	  avoid conflict with macro named __STRING in
	  /usr/include/sys/cdefs.h.  In principle, probably all of the
	  lcc include/*/*/*.h files should be changed similarly, but so
	  far, this is the only case where a conflict with
	  vendor-provided header files has been encountered.


2001-03-26 12:56:32-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* cpp/cpp.c: Avoid calling free() on NULL pointers.  While this
	  is legal in ANSI/ISO Standard C, it interferes with memory
	  bounds checking with, e.g., Electric Fence (available from
	  ftp://gatekeeper.dec.com/pub/usenet/comp.sources.unix/volume27/efence).

	  All executables (bprint, cpp, lburg, lcc, and rcc) were linked
	  with the Electric Fence library, -lefence, and the test suite
	  was then run: no pointer violations were detected.

	  The 12 fuzz test files (B. P. Miller, L. Fredriksen, and
	  B. So, ``An Empirical Study of the Reliability of Unix
	  Utilities'', Comm. ACM 33(12), 32--45, December 1990;
	  available at ftp://grilled.cs.wisc.edu/technical_papers, with
	  a 1995 update and retrospect) were also input to these
	  versions of cpp, lcc, and rcc: again, no pointer violations
	  were detected, and no abnormal behavior was observed.

	  The compiler components lcc, cpp, and rcc have also been run
	  under the Sun Solaris dbx debugger with the "check -all"
	  option to check for pointer bounds violations, and memory
	  leaks.  If these components are ever to be used in a
	  memory-resident batch mode (e.g., for run-time compilation and
	  dynamic linking of dynamically-generated source code), it will
	  be necessary to remove any memory leaks, and free all
	  allocated memory before termination.

	  Here are the memory leak reports for each of the components:

		lcc: no memory leaks on single compilation, and only one
		     for compilation of all ./tst/src/*.c files:

			Possible leaks report  (possible leaks:       1  total size:    4116 bytes)

			 Total  Num of  Leaked      Allocation call stack
			 Size   Blocks  Block
					Address
			======  ====== ==========  =======================================
			  4116       1    0x3d730  alloc < compose < filename < filename < filename < main


		cpp: one instance of read-from-uninitialized:

			Attempting to read 1 byte at address 0x8a7f4
			    which is 8196 bytes into a heap block of size 65540 bytes at 0x887f0
			This block was allocated from:
				[1] domalloc() at line 259 in "cpp.c"
				[2] setsource() at line 561 in "lex.c"
				[3] setup() at line 88 in "unix.c"
				[4] main() at line 36 in "cpp.c"

			Current function is memmove
			dbx: can't find file "/local/build/tmp7/../lcc-4.1.beta.7/cpp/unix.c" -- see `help finding-files'
			(/opt/SUNWspro/bin/../WS6U1/bin/sparcv9/dbx) where
			=>[1] memmove(dp = 0x89f6e, sp = 0x89f70, n = 1U), line 106 in "unix.c"
			  [2] foldline(s = 0x883e0), line 508 in "lex.c"
			  [3] gettokens(trp = 0xffbee59c, reset = 1), line 388 in "lex.c"
			  [4] process(trp = 0xffbee59c), line 56 in "cpp.c"

		     There are many unfreed blocks on completion,
		     showing that cpp was not designed to clean up its
		     memory allocation before exiting:

			Actual leaks report    (actual leaks:       539  total size:    3114 bytes)

			 Total  Num of  Leaked      Allocation call stack
			 Size   Blocks  Block
					Address
			======  ====== ==========  =======================================
			  2153     431      -      domalloc < newstring
			   401      89      -      domalloc < setsource
			   288       6      -      domalloc < maketokenrow
			   192      12      -      domalloc < dodefine
			    80       1    0x88378  growtokenrow < gettokens < setup < main


			Possible leaks report  (possible leaks:     244  total size:     902 bytes)

			 Total  Num of  Leaked      Allocation call stack
			 Size   Blocks  Block
					Address
			======  ====== ==========  =======================================
			   902     244      -      domalloc < newstring

			Checking for memory use...

			Blocks in use report   (blocks in use:      356  total size:   75868 bytes)

			 Total  % of Num of  Avg     Allocation call stack
			 Size    All Blocks  Size
			======= ==== ====== ======  =======================================
			  65540  86%      1  65540  domalloc < setsource < setup < main
			   4048   5%     74     54  domalloc < maketokenrow
			   2064   2%     86     24  domalloc < lookup
			   1184   1%     74     16  domalloc < normtokenrow
			   1136   1%      1   1136  growtokenrow < gettokens < process < main
			    624  <1%      1    624  calloc < _tzload < _ltzset_u < localtime_u < ctime < main
			    619  <1%     87      7  domalloc < newstring
			    200  <1%     23      8  domalloc < newhideset
			    156  <1%      1    156  calloc < _tzload < _ltzset_u < localtime_u < ctime < main
			    124  <1%      1    124  newhideset < expand < expandrow < substargs < expand < expandrow < process < main
			     36  <1%      1     36  calloc < _tzload < _ltzset_u < localtime_u < ctime < main
			     36  <1%      1     36  _strdup < _tzload < _ltzset_u < localtime_u < ctime < main
			     36  <1%      1     36  calloc < _tzload < _ltzset_u < localtime_u < ctime < main
			     36  <1%      1     36  domalloc < setsource < setup < main
			     13  <1%      1     13  calloc < _tzload < _ltzset_u < localtime_u < ctime < main
			     12  <1%      1     12  tzcpy < getzname < _ltzset_u < localtime_u < ctime < main
			      4  <1%      1      4  domalloc < iniths < main


		rcc: no memory leaks detected, but lots of blocks remain
		     unfreed on completion:

			Blocks in use report   (blocks in use:      184  total size: 1913848 bytes)

			 Total  % of Num of  Avg     Allocation call stack
			 Size    All Blocks  Size
			======= ==== ====== ======  =======================================
			 784928  41%     76  10328  allocate < dagnode
			 473616  24%     46  10296  allocate < _label
			 195624  10%     19  10296  allocate < tree
			  82112   4%      8  10264  allocate < newarray
			  62256   3%      6  10376  allocate < listnodes
			  62256   3%      6  10376  allocate < temporary
			  51920   2%      5  10384  allocate < constant
			  43120   2%      3  14373  allocate < stringn
			  33888   1%      3  11296  allocate < table
			  31152   1%      3  10384  allocate < findlabel
			  20752   1%      2  10376  allocate < genident
			  20592   1%      2  10296  allocate < code
			  10384  <1%      1  10384  allocate < install < dclglobal < decl < program < main
			  10376  <1%      1  10376  allocate < mkreg < progbeg < main
			  10304  <1%      1  10304  allocate < type < func < dclr < decl < program < main
			  10296  <1%      1  10296  allocate < tnode < dclr1 < dclr < fields < structdcl < specifier < decl
			  10272  <1%      1  10272  allocate < stringn < string < stringf < defsymbol2 < findlabel < listnodes < listnodes

	* Makefile.in: Remove four unused variables, and initialize
	  three others that are referenced.

	  Add $(EXTRALIBS) to each link step, so that, e.g., -lefence
	  can be linked into each executable for debugging and
	  validating memory use.


2001-03-26 08:03:51-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1 and doc/rcc.1: Make minor typographical changes and
	  clarifications.


2001-03-23 09:04:18-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* tst/* and */*/tst/*: Fix problem that caused failure of the
	  validation tests for paranoia.c, switch.c, and yacc.c.
	  Because of the extensive distribution tree changes for this
	  fix, I created a new release version lcc-4.1.beta.7, and froze
	  work on lcc-4.1.beta.6.

	  This problem was very hard to track down, but the clue came
	  today when I split the paranoia.c file into smaller files and
	  made experiments.  The reason for the repeated test failures
	  on these files was that they include system header files,
	  <limits.h> and <stdio.h>.  Differing sizes of constants and
	  data structures in those files resulted in different code
	  being generated on different systems.  When I took the
	  preprocessed output for paranoia.c from a Sun SPARC system to
	  an Intel x86 system, lcc on each system produced identical .s
	  files.

	  The solution was thus to move all of the test/* files into
	  test/src/*, to preserve their original contents, then to run
	  "lcc -E" on those, putting the output back into files tst/*,
	  then run "make check-1", and replace all of the */*/tst/*bk
	  files with the output of the test.

	  With those changes, all of the previous failures on all
	  platforms disappeared.


2001-03-22 12:00:21-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Makefile.in:

	  Add rcc.1 to MANFILES list.

	  Update location of ETCDIR source files.

	  Create empty file TRIPLE-FAILED when the check-3 test is run,
	  and remove it only if the test succeeded.  That way, check-4
	  and check-5 can avoid running unnecessarily.

	  Add temporary rcc versions from the "make triple" test, and
	  *.i and *.s files, to the files removed in clean target, and
	  the build directory include subdirectory to the clobber
	  target.

	  Add a report in the triple test about the test status.


2001-03-22 11:55:38-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/rcc.1: New file written today.

	* doc/lcc.1: Make minor rewordings to improve presentation.

	  Add note that -Bxxx is deprecated in favor of the new
	  \-Wo\-rcc=xxx option.


2001-03-22 11:23:37-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/c.h, src/stmt.c, README.x86: Change type of global variable
	  `density' from float to double, and revise den() macro to call
	  new dstore() function to force storage of its argument.

	  This fixes a very long-standing problem: until this change,
	  "make triple" (the compiler self-bootstrap test) always failed
	  on Intel x86 architectures.  The reason is that the Intel x86
	  (== Intel IA-32), HP/Intel IA-64, Motorola 68xxx, and a few
	  now-retired historical architectures, have floating-point
	  registers that are wider than memory words.  If computations
	  are done in registers, then the results can differ from
	  computations done with memory operands.  The result of this
	  was that the test against the jump-table density value
	  (provided by the command-line -dxxx option) could produce
	  different results when compiled by different compilers, and
	  the output jump tables, and many statement labels, differed,
	  causing "make triple" to fail.

  	  This bug took a LONG time to resolve: I put up with it, with
	  fingers crossed, from the appearance of lcc-4.1 on 16-Sep-1998
	  until today, when several hours of tedious experiments
	  (documented in the README.x86 file) finally found the cause,
	  and led to a solution.


2001-03-21 08:43:57-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/lcc.c and include/*/*/stddef.h: Add support for run-time
	  selection of wchar_t typedef.  This fixes a long-standing bug
	  in lcc (though one that is unlikely to have been encountered,
	  given the infrequent use of wchar_t and <stddef.h> in most
	  code).

	* doc/lcc.1: Document that the wchar_t typedef is selected
	  according to the setting of -Wf-wchar_t=xxx option.


2001-03-21 08:28:05-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1: Add program list to SEE ALSO section.  Add example
	  of how to display preprocessor definitions.  Remove unneeded
	  (int) typecast from sample expression for determining whether
	  char is signed or unsigned. Correct several more font
	  inconsistencies. Document two Windows-specific environment
	  variables.


2001-03-21 06:38:30-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1:
	  Move descriptions of -Wf-a, -Wf-html, and
	  -Wf-target=architecture/os into separate items in the
	  description list, making them easier to find.

	  Correct some small capitalization inconsistencies.

	  Add caution about alternate loaders.

	  Add remarks about the -Wf-unsigned_char=x and -Wf-wchar_t=xxx
	  options.

	  Change program references for italic to the more-standard
	  bold.

	  Change file references in table from roman to more-standard
	  italic.

	  Add note that LCCDIR is used before LCCAS, LCCCPP, LCCLD, and
	  LCCRCC.

	  Document new -Wo-rcc=xxx option, with companion LCCRCC
	  environment variable.

	  Add parisc/linux to target list.

	* etc/lcc.c: Add support for new -Wo-rcc=xxx option.  Add
	  comments about environment variables, and ensure that LCCDIR
	  is used first, since the others may override its effect.

	* etc/*/*.c: Add support for new -Wo-rcc=xxx option, and correct
	  typos in two files (etc/mips/irix.c and etc/x86/solaris.c).

	* Makefile.in: Add needed -I. to C macro (used in triple test),
	  since the recently-added <cpyright.h> is found there.  Add
	  test for needed $(SRCDIR)/$(ARCHITECTURE).md file in triple
	  test, so that compilation for the triple test can be avoided
	  when it would be known in advance to fail, and a `No code
	  generation yet...' warning issued instead.


2001-03-20 16:33:32-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* parisc/linux/tst/*, etc/parisc/linux.c, etc/parisc/README,
	  include/parisc/linux/*.h: New files.

	* src/bind.c: Add mips/linux and parisc/linux entries.

	* Makefile.in: Add check-mips-linux and check-parisc-linux
	  targets.

	* Makefile.in: Replace dependencies on etc/*/*.c by ETCFILES
	  list, since one make implementation could not handle
	  wildcarded dependency lists.

	* configure.in: Add support for mips/linux and parisc/linux
	  platforms.

	* configure.in:	Remove quotes from substitution of
	  OS_MAJOR_LEVEL and OS_MINOR_LEVEL, since we require integer
	  values for preprocessor symbol testing.

	* tst2/: New top-level directory to hold additional small test
	  programs used during development, but not necessarily at
	  end-user sites.  Some might eventually become part of an
	  extended lcc test suite.  Each has an associated .sh file
	  which can be executed from anywhere in the file system to make
	  the tests, which might involve several compilations and runs.


2001-03-20 11:44:14-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* include/*/*/limits.h and etc/lcc.c: Fix long-standing bug in
	  lcc's handling of signed vs. unsigned char type.

	  Analysis: lcc by default uses signed char, but this can be
	  controlled by the command-line -Wf-unsigned_char={0,1}.  The
	  C89 Standard in section 2.2.4.2.1, and the C99 Standard in
	  section 5.2.4.2.1, say:

		``If the value of an object of type char is treated as a
		signed integer when used in an expression, the value of
		CHAR_MIN shall be the same as that of SCHAR_MIN and the
		value of CHAR_MAX shall be the same as that of
		SCHAR_MAX. Otherwise, the value of CHAR_MIN shall be 0
		and the value of CHAR_MAX shall be the same as that of
		UCHAR_MAX.''

	  This means that CHAR_MIN and CHAR_MAX need to reflect the
	  current signedness of char.

	  gcc also provides signed and unsigned char support on all
	  platforms, via the options -fsigned-char and -funsigned-char,
	  and a test program (tst2/signchar.c) showed on all but one of
	  the following ten UNIX platforms that the CHAR_{MIN,MAX}
	  values correctly reflected the compilation setting:

		Apple Macintosh PPC G3	Rhapsody 5.6
		Compaq/DEC Alpha	OSF/1 4.0F
		HP 9000/712		HP-UX 10.20
		IBM PowerPC		AIX 4.2
		Intel Pentium II	FreeBSD 4.1.1
		Intel Pentium III	GNU/Linux 2.2.17-14smp (Red Hat 6.2)
		Power Macintosh 233MHz	GNU/Linux 2.2.15pre9
		SGI Origin 200		IRIX 6.5
		Sun SPARC		GNU/Linux 2.2.17-14 (Red Hat 6.2)
		Sun SPARC		Solaris 2.7

	  The failing platform was OSF/1, which reported

		CHAR_MIN        = -128
		CHAR_MAX        = 127
		char is signed

	  in both cases, although arithmetic on the char value showed
	  that the compiler was correctly producing different
	  signedness.

	  SGI IRIX 6.5's cc (MIPSpro Compilers: Version 7.30) has
	  -signed and -unsigned (default) options for the same purpose;
	  its values are also wrong in the nondefault -signed case, and
	  the compiler man page even documents this `(mis)feature':

		-signed Causes values of type char to be treated as if
			they had type signed char (which can affect the
			result of integer promotions), but the values of
			CHAR_MIN and CHAR_MAX are not affected.  The
			default is to treat values of type char as if
			they had type unsigned char.

	  gcc's <limit.h> file has code like this:

		/* Minimum and maximum values a `char' can hold.  */
		#ifdef __CHAR_UNSIGNED__
		#undef CHAR_MIN
		#define CHAR_MIN 0
		#undef CHAR_MAX
		#define CHAR_MAX 255
		#else
		#undef CHAR_MIN
		#define CHAR_MIN (-128)
		#undef CHAR_MAX
		#define CHAR_MAX 127
		#endif

	  The Sun Solaris <limit.h> has similar code:

		#if defined(_CHAR_IS_SIGNED)
		#define	CHAR_MIN	SCHAR_MIN	/* min value of a "char" */
		#define	CHAR_MAX	SCHAR_MAX	/* max value of a "char" */
		#elif defined(_CHAR_IS_UNSIGNED)
		#define	CHAR_MIN	0		/* min value of a "char" */
		#define	CHAR_MAX	UCHAR_MAX	/* max value of a "char" */
		#else
		#error "chars are signed or unsigned"
		#endif

	  The lcc header files have all been modified to use the gcc
	  symbol with the Sun bodies (so as to use symbolic names,
	  rather than bare numbers, for the constants).  Until now, the
	  etc/*.c files have remained ignorant of the
	  -Wf-unsigned_char={0,1} flag; etc/lcc.c just passes it to rcc.
	  It is finally seen by function type_init() in src/types.c.

	  With this bug fix, etc/lcc.c needs to scan the argument list
	  early on, and add -D__CHAR_UNSIGNED__ and -D_CHAR_IS_SIGNED to
	  the alist[] string if -Wf-unsigned_char=x is seen, with x
	  different from 0 (that is how type_init() works).
	  Fortunately, among the 15 limits.h files in the include tree,
	  there are only two unique ones, so the fixes can be done just
	  twice, then replicated to 13 other places.


2001-03-20 08:20:37-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Makefile.in: Add AWK variable and rule to create cpyright.h.

	* Makefile.in: Change LOCAL to LOCALDIR, both to avoid conflict
	  with symbol in src/c.h, and to emphasize that the value is a
	  directory, just like GCCDIR, LCCDIR, and NATIVEDIR.

	* Makefile.in: Correct dependency of $Bosfile$O to reflect
	  yesterday's changes to the etc/*/*.c hierarchy, and add
	  cpyright.h to dependency list of $Brcc$O.

	* etc/lcc.c and etc/*/*.c: Add support for -dynamic and -static
	  to all files, for uniformity, and to remove all use of
	  HAVE_STATIC_DYNAMIC in etc/lcc.c.

	* etc/ia64/{README,freebsd.c,linux.c,win32.c,win64.c}: New
	  files.  The .c files have been adapted from the corresponding
	  etc/x86/*.c files, with addition of a warning comment at the
	  top, and update of the -target=arch/os value, in the
	  expectation that x86 is the nearest starting point to IA-64,
	  and will have very similar operating system characteristics,
	  so relatively little effort should be needed to update these
	  files when IA-64 systems become available.

	* configure.in: Update VERSIONDATE, and set AWK variable.
	  Change LOCAL to LOCALDIR (see remark above).

	* etc/mips/{README,irix.c}, acconfig.h, configure.in, and
	  Makefile.in: Complete update for support on SGI IRIX 6.x (-mips2
	  -n32).  The old IRIX 5.x (-mips2 -32 (or -o32)) code remains
	  available, and can be enabled by defining IRIX5 at compile time.
	  Regrettably, there is no predefined preprocessor symbol that can
	  be used to distinguish between the two, so we need to make
	  configure do the job, based on the output of "uname -r".
	  configure.in now sets two variables, OS_MAJOR_LEVEL and
	  OS_MINOR_LEVEL, in Makefile and lcc-conf.h.

	* doc/lcc.1: Document that -dynamic and -static are recognized
	  on all platforms, but may be silently ignored on some.  Also,
	  note that Sun Solaris -Bdynamic and -Bstatic are recognized
	  for compatibility with native compilers, but are otherwise
	  equivalent to lcc's standard options.

	* doc/lcc.1: Add x86/solaris to supported target list.

	* src/bind.c: Add x86/solaris to supported target list.

	* src/x86solaris.md: New file (based on src/x86linux.md).

	* src/inits.c: Add x86solaris_init() prototype.

	* src/pass2.c: Add x86solaris_init() prototype.

	* Makefile.in: Add targets for $Bx86solaris$O and
	  $Bx86solaris.c, with corresponding file dependencies.  Add
	  display of OS_MAJOR_LEVEL and OS_MINOR_LEVEL in show-setup.
	  Add check-x86-solaris target.

	* doc/lcc.1: Document new -Wo-as=xxx option.

	* doc/lcc.c: Change CPP environment variable to LCCCPP, and add
	  LCCAS environment variable support.

	* doc/lcc.c: Add note that -P prints on stderr.

	* src/mips.md: Change framesize rounding from multiple of 8 to
	  multiple of 16, since that is a requirement of the -n32 and
	  -64 memory models in SGI IRIX 6.x.  The old code is preserved
	  in #if 0 ... #else block, but should not be needed even on
	  older IRIX 5.x systems with -32 (== -o32) memory models; all
	  that happens is that up to 8 bytes more space is needed per
	  stack frame.


2001-03-19 16:56:37-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1: Document the new -copyright and -version options.
	  These are recommended in the GNU Project, and handy to have
	  available in a standardized form.

	* etc/lcc.c and src/main.c: Add support for -copyright and
	  -version options; they can be abbreviated to a minimum of two
	  initial letters.

	* etc/lcc.c and src/main.c: Include <cpyright.h> and add new
	  copyright() function (identical in each).

	* src/main.c: Include <lcc-conf.h> to support -version option.

	* ./cpyright.h: New file created by make during build process
	  from $(srcdir)/CPYRIGHT file.  It is used to support the
	  -copyright option in etc/lcc.c.  An alternate possibility of
	  reading the installed CPYRIGHT file at run time was rejected,
	  to ensure that the binary executables always carry the
	  copyright notice embedded inside them.

	* etc/lcc.c and src/main.c: Add support for GNU/POSIX-style
	  --option, equivalent to -option. Thus, "lcc --version" and
	  "lcc -version" behave alike.


2001-03-19 13:03:15-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/lcc.c: Add support for LCCAS environment variable.


2001-03-19 12:52:17-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* configure.in: Add check for uchar data type.

	* configure.in: Substitute ARCHITECTURE and OS in lcc-conf.h as
	  well as in Makefile.  These values are now needed at run-time
	  in lcc to support the implicit -S-flag convenience feature
	  noted below.

	* configure.in: Improve the setting of GCCDIR and LIBDIR to work
	  on more systems.


2001-03-19 12:34:31-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Makefile.in: Rename some variables to uppercase, leaving only
	  GNU-conventional exec_prefix, prefix, and src_dir in
	  lowercase.

	* Makefile.in: Remove old architecture-os use that occurred
	  along with architecture/os.  The slash form is now used
	  exclusively, matching the use in lcc's document
	  -Wf-target=arch/os options.

	* Makefile.in: Make BUILDDIR and OSFILE include
	  $(ARCHITECTURE)/$(OS).

	* Makefile.in and configure.in: Add a few more needed programs
	  to the list determined at configure time.

	* Makefile.in: Add -I$(srcdir) to INCLUDES variable, as part of
	  changes that now make it possible to configure and build lcc
	  entirely outside of the distribution tree, which thus could be
	  on a read-only file system, such as a CD-ROM.

	* Makefile.in: Add some new variables to shorten repeated
	  command lines.

	* Makefile.in: Add documentation of LCCFLAGS option.

	* Makefile.in: Define MANFILES in terms of DOCDIR and LBURGDIR,
	  needed for builds outside the distribution tree.

	* Makefile.in: Define RCCSRCS in terms of SRCDIR, needed for
	  builds outside the distribution tree.

	* Makefile.in: Add $(srcdir) prefixes in several places, needed
	  for builds outside the distribution tree.

	* Makefile.in: Replace old TARGET variable by new, and more
	  precise, ARCHOS variable.

	* Makefile.in: Add extensive commentary about the validation
	  suite, and make the check-xxx targets verify that certain
	  files are present before running the test.  This allows the
	  suite to contain checks for as-yet-unsupported architectures
	  that will change from a message ``No code generator yet for
	  ...'' to automatically running the checks, without further
	  changes to the Makefile.in file.

	* Makefile.in: Rename testclean target to clean-test, for
	  consistency with other targets.

	* Makefile.in: Rename (un)install-include to (un)install-inc to
	  better resemble the other (un)install-xxx targets.

	* Makefile.in: Add a MKDIR step in install-inc, to work around
	  an apparent bug in the install-sh script: if the directory
	  doesn't exist the first time, it copies the source file into a
	  target file of the name of the directory.

	* Makefile.in: Update the show-install target to tell how much
	  disk space is possibly needed in both build and installation
	  trees.

	* Makefile.in: Add TAGS target.

	* Makefile.in: Split test target into test-1 and test-2, so that
	  test-1 can display a clear notice of what is being built
	  during a "make check" run.


2001-03-19 12:01:08-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* New or updated include files:

	  	include/sparc/solaris/ctype.h

	  Sun Solaris 2.7 has a nonstandard directive (#lint) in
	  <ctype.h> which causes a Standard C preprocessor, like lcc's
	  cpp, to diagnose a fatal error.  We therefore provide an
	  lcc-private ctype.h for this system.

		include/x86/freebsd/assert.h

	  FreeBSD uses a different form of the assert macro, and a
	  different library function, than Linux does; the two systems
	  otherwise have identical lcc header files.

	* New header files that will require inspection when lcc 4.x
	  gets an updated code generator for the PowerPC
	  architecture. [There is a contributed one for lcc 3.x, but it
	  hasn't yet been adapted for lcc 4.x.]

		include/ppc/aix/stddef.h
		include/ppc/aix/stdio.h
		include/ppc/aix/stdlib.h
		include/ppc/aix/time.h

		include/ppc/linux/stddef.h
		include/ppc/linux/stdio.h
		include/ppc/linux/stdlib.h
		include/ppc/linux/time.h

		include/ppc/macosx/stddef.h
		include/ppc/macosx/stdio.h
		include/ppc/macosx/stdlib.h
		include/ppc/macosx/time.h


2001-03-19 11:44:05-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/lcc.c: Add include of <lcc-conf.h>.

	* doc/lcc.1: Add conditional near the top to set the
	  preprocessor symbol HAVE_STATIC_DYNAMIC, to move platform
	  dependence out of the code body.  The -dynamic and -static
	  options are now supported on several platforms.  The -dynamic
	  option is completely new (see function opt(), and
	  corresponding code in etc/*/*.c), provided for symmetry with
	  -static, and because it is supplied by native compilers on
	  some platforms.

	* doc/lcc.1: Add support for LCCCPP and LCCLD variables.

	* doc/lcc.1: Document options in help display that are new, or
	  were previously omitted.

	* doc/lcc.1: Add new feature in function opt() that selection of
	  a nonnative value for the -Wf-target= option automatically
	  turns on the -S flag (since assembly would otherwise be
	  guaranteed to fail), and for -Wf-target=null, also that the .s
	  file is suppressed entirely.  Older versions of lcc would
	  invoke the assembler unless -S were given, and for
	  -Wf-target=null, would produce empty .s files that simply
	  clutter the directory.


2001-03-19 11:17:28-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* etc/parisc/hpux.c: Update to support -dynamic, -static, -p,
	  and -pg options.  The profiling options require a run-time
	  check that the needed startup .o files are installed; if not,
	  a warning is issued and profiling is ignored.

	* etc/*/*.c: Support new -Wo-cpp=xxx variable to select an
	  alternate preprocessor at run time.  I found this option
	  desirable during bootstrapping: on at least one system,
	  nonstandard preprocessor extensions in one system header file
	  prevented the lcc self-bootstrap, because an lcc-specific
	  version of that header file was not yet prepared.

	* etc/sparc/solaris.c: Change SUNDIR to generic NATIVEDIR, in
	  the expectation that it can be set on other architectures that
	  might require similar vendor-specific path settings.

	* Complete reorganization and major update of etc tree.  Source
	  files are now named etc/$ARCHITECTURE/$OS.c, where those two
	  variables are set at configure time in both the Makefile and
	  lcc-conf.h.  This makes the structure more like that used in
	  the include and top-level $ARCHITECTURE trees in the
	  distribution tree, as well as in the installed tree.
	  Makefile.in now sets OSFILE to
	  $(srcdir)/etc/$(ARCHITECTURE)/$(OS).c to support this change.

	* Complete major updates and additions of etc/*/*.c files.
	  Linking of .o files from other C compilers is now possible for
	  ppc/aix, ppc/linux, ppc/macosx, and parisc/hpux platforms.

	* Add support for -pg and -p options in ppc/aix, ppc/linux,
	  ppc/macosx, parisc/hpux and alpha/osf platforms (they could
	  have been in alpha/osf long ago, but were simply omitted).


2001-03-19 10:38:48-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* doc/lcc.1: With the changes noted below, all options and
	  environment variables recognized by the lcc code are now
	  properly documented in the manual pages.

	* doc/lcc.1: Add new ENVIRONMENT VARIABLES section, with
	  documentation of LCCCPP, LCCDIR, LCCINPUTS, LCCLD, TEMP, TMP,
	  and TMPDIR variables.  These are the only ones for which
	  getenv() calls are issued anywhere in the source code.

	* doc/lcc.1: Change ANSI to ANSI/ISO, since the definitive
	  standard is now ``ISO/IEC 9899:1990: Programming languages ---
	  C'', adopted by ANSI to replace ``American National Standard
	  for information systems: programming language: C: ANSI
	  X3.159-1989''.

	* doc/lcc.1: Note that -O produces a warning.

	* doc/lcc.1: Document new -dynamic and old (previously
	  undocumented) -static options, with note that they are not
	  available on all systems.

	* doc/lcc.1: Document previously-undocumented -Ldir and -lxxx
	  options.

	* doc/lcc.1: Document new -Wo-cpp=xxx option and new companion
	  LCCCPP environment variable.

	* doc/lcc.1: Document previously-undocumented -Wo-ld=xxx option
	  and new companion LCCLD environment variable.

	* doc/lcc.1: Typeset *.h names in italics, following
	  conventional man page conventions (e.g., as documented by Sun
	  Microsystems).

	* doc/lcc.1: Replace the usage `target/os' with the more precise
	  `architecture/os': `target' now uniformly refers to the pair
	  of architecture and operating system.

	* doc/lcc.1: Update the list of accepted values for the
	  -Wf-target= option; several were previously missing.  Include
	  combinations for which no code generator yet exists, but for
	  which lcc is known to run on, or planned to in the future.

	* doc/lcc.1: Document the new feature that selection of a
	  nonnative value for the -Wf-target= option automatically turns
	  on the -S flag (since assembly would otherwise be guaranteed
	  to fail), and for -Wf-target=null, also that the .s file is
	  suppressed entirely.

	* doc/lcc.1: Add note for -Wf-html option that the output is
	  strictly HTML grammar conformant, and includes hypertext links
	  for cross references in the code.

	* doc/lcc.1: Add a few missing backslashes before option
	  hyphens.

	* doc/lcc.1: Convert `standard' to `Standard' when used as a
	  proper noun.  P. J. Plauger, noted software developer, author,
	  and former longtime secretary of ANSI X3J11, recommends the
	  use ``Standard C'', instead of ``ANSI C'' or ``ISO C''.

	* doc/lcc.1: Minor troff changes to ensure a clean checknr run.

	* doc/lcc.1: In the SEE ALSO section, correct the italicization
	  of book titles, and add references to the 1989 ANSI and 1990
	  ISO C standards.


2001-03-18 09:11:16-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/main.c: Add new private file-global variable open_s_file,
	  initialized to 1, that supplies a Boolean precondition to the
	  freopen(..., stdout) call.  That variable is set to 0 when
	  -Wf-target=null is specified, to prevent the creation of
	  nuisance empty .s files.


2001-03-18 00:04:21-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* acconfig.h: Add new #undef entries for ARCHITECTURE, OS, and
	  uchar.  uchar was previously hard-coded into cpp/cpp.h, but
	  that conflicts with a system type on IBM AIX 4.2.  configure
	  now checks for this type, and defines uchar only when the
	  system has not already defined it.

	* cpp/cpp.c: Remove O/S-dependent conditional protecting
	  definition of uchar.  configure now makes this check, setting
	  the symbol uchar in lcc-conf.h if needed.

	* cpp/cpp.h: Increase constants in definitions of INS, OBS, and
	  NARG to the largest of (C89, C99, and C++98).  Because the
	  preprocessor is explicitly defined on p. 4 of the lcc book ``A
	  Retargetable C Compiler: Design and Implementation'' to NOT be
	  part of lcc, this change does not conflict with any of lcc's
	  strict Standard C limit checks.  It just brings the C
	  preprocessor into conformance with the two later language
	  standards, neither of which introduce any new features, other
	  than minimum implementation limits, into the C preprocessor.


2001-03-17 15:44:14-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/run.sh: Change srcdir to SRCDIR to be consistent with the
	  top-level Makefile. Add support for DEBUGRUN environment
	  variable to get additional debug output.


2001-03-17 14:35:52-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/x86linux.md: Swap arguments in flt rule: they should be
	  %%st,%%st(1) instead of %%st(1),%%st.  Assemblers warned about
	  the bad order, and then swapped arguments.  Run-time tests
	  were run to make sure that this change did not invalidate any
	  binary operation (*, /, +, -).


2001-03-16 18:42:01-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* cpp/cpp.c: Add new array ifline[NIF] to track starting line
	  number of #if/#ifdef/#ifndef statements, so that we can issue
	  a much-more useful diagnostic in the event of a missing
	  #endif.  The previous version simply reported an error on the
	  last line of the file, which is no help at all to the user.

	* cpp/cpp.c: Change OUTS from hardcoded value of 16384 to OBS,
	  set in cpp/cpp.h.  Its minimum value must reflect limits
	  in the ANSI and ISO Standards for C and C++.


2001-03-16 11:59:14-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/*.md: Add typecasts in print() calls with %x arguments,
	  to ensure that a value of the correct size is passed. Before
	  this bug fix, half-word negative constants would be output
	  as 32-bit values, causing assemblers on some systems to raise
	  warnings (although the assembled values were always correct).


2001-03-14 11:51:57-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* Remove ./BUILD-LCC.sh, since ./configure and Makefile.in now
	  does that job, and more.

	* New files added manually: README.UTAH, ChangeLog, TO-DO.

	* Add CHECK-STATUS file for a compact record of the results of
	  "make check" runs on all systems on which lcc can be built.

	* Rename makefile to makefile.org; it is no longer be needed,
	  except possibly for Windows platforms, but there, Jacob
	  Navia has taken lcc-win32 far beyond lcc-4.1 (see
	  http://www.cs.virginia.edu/~lcc-win32, or its mirror
	  http://ps.qss.cz/lcc).

	* New files manually created: acconfig.h, configure.in,
	  Makefile.in.

	* New files from GNU autoconf and descendants: config.guess,
	  config.sub.  config.guess, originally taken from the GNU
	  emacs-21.0.99 beta-test distribution, has modifications to
	  fix a bug when used with the Portland Group compiler, pgcc.
	  That bug, and its fix, have been reported to the GNU
	  autoconf developers, and the fix is expected to be
	  incorporated in the autoconf-3.0 release sometime in 2001.

	* New file from X11 distribution: install-sh.  This is used to
	  standardize, and simplify, the "make install" steps in the
	  Makefile.

	* New files created by GNU autoconf and autoheader at developer
	  site: configure, lcc-conf.hin.

	* Build-time new files created by ./configure at end-user site:
	  config.cache, config.log, config.status, lcc-conf.h, Makefile.

	* The generated Makefile supports all of the GNU standard
	  targets, notably "all", "check", "clean", "mostlyclean",
	  "distclean", "install", and "uninstall".

	  The "check", "install", and "uninstall" targets cascade
	  hierarchically into specialized targets that do part of the
	  main job.  Thus, one can do "make check-alpha" to check just
	  the cross generation of code for the Compaq/DEC Alpha
	  architecture, or "make check-cross" to run all cross
	  generation validation tests, while skipping the
	  self-validation test.

	* New directory trees with skeletal support for several new
	  platforms:

		ia64
		ia64/freebsd
		ia64/freebsd/tst
		ia64/linux
		ia64/linux/tst
		ia64/win32
		ia64/win32/tst
		ia64/win64
		ia64/win64/tst

		include/ia64
		include/ia64/freebsd
		include/ia64/linux
		include/ia64/win32
		include/ia64/win64
		include/parisc
		include/parisc/hpux
		include/ppc
		include/ppc/aix
		include/ppc/linux
		include/ppc/macosx

		parisc
		parisc/hpux
		parisc/hpux/tst

		ppc
		ppc/aix
		ppc/aix/tst
		ppc/linux
		ppc/linux/tst
		ppc/macosx
		ppc/macosx/tst

	  In addition, these trees from older lcc releases have been
	  included, because there is no good reason to drop them, in
	  case a few such systems remain in use.

		include/mips/ultrix
		include/sparc/sun

		mips/ultrix
		mips/ultrix/tst

		sparc/sun
		sparc/sun/tst

	  In most cases, the *.h files in the new include trees have
	  not yet been updated to match those of native compilers on
	  those systems.  However, the number of required changes is
	  in general very small, and many of the header files require
	  no updates at all.

	* New or changed test output files are listed below.  The
	  changes reflect modifications made to lcc by its developers
	  since the original 4.1 release on 21-Sep-1998.  For new CPU
	  architectures for which code generators have not yet been
	  done, the *.*bk files will need to be completely replaced.
	  For new operating systems on a supported architecture, it is
	  often sufficient to just copy in the *.*bk files from a
	  parallel tree.

		./alpha/linux/tst/cq.2bk
		./alpha/linux/tst/cq.sbk
		./alpha/linux/tst/cvt.sbk
		./alpha/linux/tst/limits.sbk
		./alpha/linux/tst/switch.2bk
		./alpha/linux/tst/yacc.2bk
		./alpha/linux/tst/yacc.sbk

		./alpha/osf/tst/cq.2bk
		./alpha/osf/tst/cq.sbk
		./alpha/osf/tst/cvt.sbk
		./alpha/osf/tst/limits.2bk
		./alpha/osf/tst/limits.sbk
		./alpha/osf/tst/switch.2bk
		./alpha/osf/tst/yacc.2bk
		./alpha/osf/tst/yacc.sbk

		./ia64/freebsd/tst/8q.sbk
		./ia64/freebsd/tst/array.sbk
		./ia64/freebsd/tst/cf.sbk
		./ia64/freebsd/tst/cq.sbk
		./ia64/freebsd/tst/cvt.sbk
		./ia64/freebsd/tst/fields.sbk
		./ia64/freebsd/tst/front.sbk
		./ia64/freebsd/tst/incr.sbk
		./ia64/freebsd/tst/init.sbk
		./ia64/freebsd/tst/limits.sbk
		./ia64/freebsd/tst/paranoia.1bk
		./ia64/freebsd/tst/paranoia.sbk
		./ia64/freebsd/tst/sort.sbk
		./ia64/freebsd/tst/spill.sbk
		./ia64/freebsd/tst/stdarg.sbk
		./ia64/freebsd/tst/struct.sbk
		./ia64/freebsd/tst/switch.sbk
		./ia64/freebsd/tst/wf1.sbk
		./ia64/freebsd/tst/yacc.2bk
		./ia64/freebsd/tst/yacc.sbk

		./ia64/linux/tst/8q.sbk
		./ia64/linux/tst/array.sbk
		./ia64/linux/tst/cf.sbk
		./ia64/linux/tst/cq.sbk
		./ia64/linux/tst/cvt.sbk
		./ia64/linux/tst/fields.sbk
		./ia64/linux/tst/front.sbk
		./ia64/linux/tst/incr.sbk
		./ia64/linux/tst/init.sbk
		./ia64/linux/tst/limits.sbk
		./ia64/linux/tst/paranoia.1bk
		./ia64/linux/tst/paranoia.sbk
		./ia64/linux/tst/sort.sbk
		./ia64/linux/tst/spill.sbk
		./ia64/linux/tst/stdarg.sbk
		./ia64/linux/tst/struct.sbk
		./ia64/linux/tst/switch.sbk
		./ia64/linux/tst/wf1.sbk
		./ia64/linux/tst/yacc.2bk
		./ia64/linux/tst/yacc.sbk

		./mips/irix/tst/yacc.2bk
		./mips/irix/tst/yacc.sbk
		./mips/ultrix/tst/8q.sbk
		./mips/ultrix/tst/array.sbk
		./mips/ultrix/tst/cf.sbk
		./mips/ultrix/tst/cq.sbk
		./mips/ultrix/tst/cvt.sbk
		./mips/ultrix/tst/fields.sbk
		./mips/ultrix/tst/front.sbk
		./mips/ultrix/tst/incr.sbk
		./mips/ultrix/tst/init.sbk
		./mips/ultrix/tst/limits.sbk
		./mips/ultrix/tst/paranoia.sbk
		./mips/ultrix/tst/sort.sbk
		./mips/ultrix/tst/spill.sbk
		./mips/ultrix/tst/stdarg.sbk
		./mips/ultrix/tst/struct.sbk
		./mips/ultrix/tst/switch.sbk
		./mips/ultrix/tst/wf1.sbk
		./mips/ultrix/tst/yacc.2bk
		./mips/ultrix/tst/yacc.sbk

		./sparc/linux/tst/8q.sbk
		./sparc/linux/tst/array.sbk
		./sparc/linux/tst/cf.sbk
		./sparc/linux/tst/cq.sbk
		./sparc/linux/tst/cvt.sbk
		./sparc/linux/tst/fields.sbk
		./sparc/linux/tst/front.sbk
		./sparc/linux/tst/incr.sbk
		./sparc/linux/tst/init.sbk
		./sparc/linux/tst/limits.sbk
		./sparc/linux/tst/paranoia.1bk
		./sparc/linux/tst/paranoia.sbk
		./sparc/linux/tst/sort.sbk
		./sparc/linux/tst/spill.sbk
		./sparc/linux/tst/stdarg.sbk
		./sparc/linux/tst/struct.sbk
		./sparc/linux/tst/switch.sbk
		./sparc/linux/tst/wf1.sbk
		./sparc/linux/tst/yacc.2bk
		./sparc/linux/tst/yacc.sbk

		./sparc/solaris/tst/yacc.2bk
		./sparc/solaris/tst/yacc.sbk

		./sparc/sun/tst/8q.sbk
		./sparc/sun/tst/array.sbk
		./sparc/sun/tst/cf.sbk
		./sparc/sun/tst/cq.sbk
		./sparc/sun/tst/cvt.sbk
		./sparc/sun/tst/fields.sbk
		./sparc/sun/tst/front.sbk
		./sparc/sun/tst/incr.sbk
		./sparc/sun/tst/init.sbk
		./sparc/sun/tst/limits.sbk
		./sparc/sun/tst/paranoia.sbk
		./sparc/sun/tst/sort.sbk
		./sparc/sun/tst/spill.sbk
		./sparc/sun/tst/stdarg.sbk
		./sparc/sun/tst/struct.sbk
		./sparc/sun/tst/switch.sbk
		./sparc/sun/tst/wf1.sbk
		./sparc/sun/tst/yacc.2bk
		./sparc/sun/tst/yacc.sbk

		./x86/freebsd/tst/8q.sbk
		./x86/freebsd/tst/array.sbk
		./x86/freebsd/tst/cf.sbk
		./x86/freebsd/tst/cq.sbk
		./x86/freebsd/tst/cvt.sbk
		./x86/freebsd/tst/fields.sbk
		./x86/freebsd/tst/front.sbk
		./x86/freebsd/tst/incr.sbk
		./x86/freebsd/tst/init.sbk
		./x86/freebsd/tst/limits.sbk
		./x86/freebsd/tst/paranoia.1bk
		./x86/freebsd/tst/paranoia.sbk
		./x86/freebsd/tst/sort.sbk
		./x86/freebsd/tst/spill.sbk
		./x86/freebsd/tst/stdarg.sbk
		./x86/freebsd/tst/struct.sbk
		./x86/freebsd/tst/switch.sbk
		./x86/freebsd/tst/wf1.sbk
		./x86/freebsd/tst/yacc.2bk
		./x86/freebsd/tst/yacc.sbk

		./x86/linux/tst/8q.sbk
		./x86/linux/tst/array.sbk
		./x86/linux/tst/cf.sbk
		./x86/linux/tst/cq.sbk
		./x86/linux/tst/cvt.sbk
		./x86/linux/tst/fields.sbk
		./x86/linux/tst/front.sbk
		./x86/linux/tst/incr.sbk
		./x86/linux/tst/init.sbk
		./x86/linux/tst/limits.sbk
		./x86/linux/tst/paranoia.1bk
		./x86/linux/tst/paranoia.sbk
		./x86/linux/tst/sort.sbk
		./x86/linux/tst/spill.sbk
		./x86/linux/tst/stdarg.sbk
		./x86/linux/tst/struct.sbk
		./x86/linux/tst/switch.sbk
		./x86/linux/tst/wf1.sbk
		./x86/linux/tst/yacc.2bk
		./x86/linux/tst/yacc.sbk

	* New file: etc/hpux.c for parisc/hpux target.  There is no
	  PA-RISC code generator for lcc.  This file may still require a
	  few minor updates in the compiler, assembler, and loader
	  arguments.

	* etc/solaris.c: Update location of native compiler
	  installation.

	* lburg/gram.c: Add "#include <lcc-conf.h>" and remove
	  conditional around the single use of the inline keyword;
	  lcc-conf.h now makes a suitable definition of inline.
	  Definition of __GNUC__ is insufficient: on FreeBSD 4.1.1, c89
	  is based on gcc, and thus defines __GNUC__, but does not
	  recognize inline; instead, it recognizes __inline__, which the
	  autoconfiguration process discovers and handles nicely.  This
	  is the ONLY file in the entire lcc source tree, outside of the
	  local-system-dependent etc/*.c files, that currently needs
	  lcc-conf.h, which is a wonderful tribute to the portability of
	  the original lcc code.

	* src/x86linux.md: Add one conditional to handle a FreeBSD
	  difference from GNU/Linux, thereby avoiding the need for an
	  almost identical copy of this file as src/x86freebsd.md.

	* src/bind.c: Add alpha/linux, ppc/aix, sparc/linux, sparc/sun,
	  and x86/freebsd bindings.  As support for new architectures
	  are added (e.g., ia64, parisc, ppc, ...), simple changes to
	  this file will be needed.  Code for currently-unsupported, but
	  possibly-supported-in-the-future, architectures is bracketed
	  by #if 0 ... #endif in this file.

	* src/c.h: Retrofit a small fragment from the lcc-3.x ancestor
	  in an attempt to get the src/ppc.c file to compile.  [It does
	  not, so until it is updated for lcc-4.x data structures, there
	  is no code generation possible for the PowerPC architecture.]
	  Once the PowerPC support is working properly, this file may be
	  able to revert to its original state in lcc-4.1.


2001-03-11 01:36:51-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* cpp/cpp.c: Apply fix from Jacob Navia of 10-Mar-2001 for bug
	  discovered by Nelson H. F. Beebe; an input stream with an
	  erroneous "#defined foo bar" (instead of #define foo bar)
	  confused the #if...#endif nesting scan, producing an unhelpful
	  complaint about an unclosed #if, listing the last line in the
	  file as the error location.


2001-03-11 01:22:03-0700  Nelson H. F. Beebe  <beebe@math.utah.edu>

	* src/dag.c: Add redefinition of kill to Kill to avoid collision
	  with symbol in <signal.h>.  This bug was reported long ago,
	  but somehow did not get into the updates at the lcc Web site.
